<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>glBufferData - OpenGL 4 Reference Pages</title>
    <link rel="stylesheet" type="text/css" href="opengl-man.css"/>
    <meta name="generator" content="DocBook XSL Stylesheets V1.78.1"/>
    <script type="text/x-mathjax-config">
            MathJax.Hub.Config({
                MathML: {
                    extensions: ["content-mathml.js"]
                },
                tex2jax: {
                    inlineMath: [['$','$'], ['\\(','\\)']]
                }
            });
        </script>
    <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"/>
  </head>
  <body>
    <header/>
    <div class="refentry" id="glBufferData">
      <div class="titlepage"/>
      <div class="refnamediv">
        <h2>Name</h2>
        <p>glBufferData, glNamedBufferData — creates and initializes a buffer object's data
    store</p>
      </div>
      <div class="refsynopsisdiv">
        <h2>C Specification</h2>
        <div class="funcsynopsis">
          <table style="border: 0; cellspacing: 0; cellpadding: 0;" class="funcprototype-table">
            <tr>
              <td>
                <code class="funcdef">void <strong class="fsfunc">glBufferData</strong>(</code>
              </td>
              <td>GLenum <var class="pdparam">target</var>, </td>
            </tr>
            <tr>
              <td> </td>
              <td>GLsizeiptr <var class="pdparam">size</var>, </td>
            </tr>
            <tr>
              <td> </td>
              <td>const GLvoid * <var class="pdparam">data</var>, </td>
            </tr>
            <tr>
              <td> </td>
              <td>GLenum <var class="pdparam">usage</var><code>)</code>;</td>
            </tr>
          </table>
          <div class="funcprototype-spacer"> </div>
          <table style="border: 0; cellspacing: 0; cellpadding: 0;" class="funcprototype-table">
            <tr>
              <td>
                <code class="funcdef">void <strong class="fsfunc">glNamedBufferData</strong>(</code>
              </td>
              <td>GLuint <var class="pdparam">buffer</var>, </td>
            </tr>
            <tr>
              <td> </td>
              <td>GLsizei <var class="pdparam">size</var>, </td>
            </tr>
            <tr>
              <td> </td>
              <td>const void *<var class="pdparam">data</var>, </td>
            </tr>
            <tr>
              <td> </td>
              <td>GLenum <var class="pdparam">usage</var><code>)</code>;</td>
            </tr>
          </table>
          <div class="funcprototype-spacer"> </div>
        </div>
      </div>
      <div class="refsect1" id="parameters">
        <h2>Parameters</h2>
        <div class="variablelist">
          <dl class="variablelist">
            <dt>
              <span class="term">
                <em class="parameter">
                  <code>target</code>
                </em>
              </span>
            </dt>
            <dd>
              <p>
            Specifies the target to which the buffer object is bound for
            <code class="function">glBufferData</code>, which must be one of the
            buffer binding targets in the following table:
          </p>
              <div class="informaltable">
                <table style="border-collapse: collapse; border-top: 2px solid ; border-bottom: 2px solid ; border-left: 2px solid ; border-right: 2px solid ; ">
                  <colgroup>
                    <col style="text-align: left; " class="col1"/>
                    <col style="text-align: left; " class="col2"/>
                  </colgroup>
                  <thead>
                    <tr>
                      <th style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
                        <span class="bold">
                          <strong>Buffer Binding Target</strong>
                        </span>
                      </th>
                      <th style="text-align: left; border-bottom: 2px solid ; ">
                        <span class="bold">
                          <strong>Purpose</strong>
                        </span>
                      </th>
                    </tr>
                  </thead>
                  <tbody>
                    <tr>
                      <td style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
                        <code class="constant">GL_ARRAY_BUFFER</code>
                      </td>
                      <td style="text-align: left; border-bottom: 2px solid ; ">Vertex attributes</td>
                    </tr>
                    <tr>
                      <td style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
                        <code class="constant">GL_ATOMIC_COUNTER_BUFFER</code>
                      </td>
                      <td style="text-align: left; border-bottom: 2px solid ; ">Atomic counter storage</td>
                    </tr>
                    <tr>
                      <td style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
                        <code class="constant">GL_COPY_READ_BUFFER</code>
                      </td>
                      <td style="text-align: left; border-bottom: 2px solid ; ">Buffer copy source</td>
                    </tr>
                    <tr>
                      <td style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
                        <code class="constant">GL_COPY_WRITE_BUFFER</code>
                      </td>
                      <td style="text-align: left; border-bottom: 2px solid ; ">Buffer copy destination</td>
                    </tr>
                    <tr>
                      <td style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
                        <code class="constant">GL_DISPATCH_INDIRECT_BUFFER</code>
                      </td>
                      <td style="text-align: left; border-bottom: 2px solid ; ">Indirect compute dispatch commands</td>
                    </tr>
                    <tr>
                      <td style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
                        <code class="constant">GL_DRAW_INDIRECT_BUFFER</code>
                      </td>
                      <td style="text-align: left; border-bottom: 2px solid ; ">Indirect command arguments</td>
                    </tr>
                    <tr>
                      <td style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
                        <code class="constant">GL_ELEMENT_ARRAY_BUFFER</code>
                      </td>
                      <td style="text-align: left; border-bottom: 2px solid ; ">Vertex array indices</td>
                    </tr>
                    <tr>
                      <td style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
                        <code class="constant">GL_PIXEL_PACK_BUFFER</code>
                      </td>
                      <td style="text-align: left; border-bottom: 2px solid ; ">Pixel read target</td>
                    </tr>
                    <tr>
                      <td style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
                        <code class="constant">GL_PIXEL_UNPACK_BUFFER</code>
                      </td>
                      <td style="text-align: left; border-bottom: 2px solid ; ">Texture data source</td>
                    </tr>
                    <tr>
                      <td style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
                        <code class="constant">GL_QUERY_BUFFER</code>
                      </td>
                      <td style="text-align: left; border-bottom: 2px solid ; ">Query result buffer</td>
                    </tr>
                    <tr>
                      <td style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
                        <code class="constant">GL_SHADER_STORAGE_BUFFER</code>
                      </td>
                      <td style="text-align: left; border-bottom: 2px solid ; ">Read-write storage for shaders</td>
                    </tr>
                    <tr>
                      <td style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
                        <code class="constant">GL_TEXTURE_BUFFER</code>
                      </td>
                      <td style="text-align: left; border-bottom: 2px solid ; ">Texture data buffer</td>
                    </tr>
                    <tr>
                      <td style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
                        <code class="constant">GL_TRANSFORM_FEEDBACK_BUFFER</code>
                      </td>
                      <td style="text-align: left; border-bottom: 2px solid ; ">Transform feedback buffer</td>
                    </tr>
                    <tr>
                      <td style="text-align: left; border-right: 2px solid ; ">
                        <code class="constant">GL_UNIFORM_BUFFER</code>
                      </td>
                      <td style="text-align: left; ">Uniform block storage</td>
                    </tr>
                  </tbody>
                </table>
              </div>
            </dd>
            <dt>
              <span class="term">
                <em class="parameter">
                  <code>buffer</code>
                </em>
              </span>
            </dt>
            <dd>
              <p>Specifies the name of the buffer object for
          <code class="function">glNamedBufferData</code> function.</p>
            </dd>
            <dt>
              <span class="term">
                <em class="parameter">
                  <code>size</code>
                </em>
              </span>
            </dt>
            <dd>
              <p>Specifies the size in bytes of the buffer object's new data
          store.</p>
            </dd>
            <dt>
              <span class="term">
                <em class="parameter">
                  <code>data</code>
                </em>
              </span>
            </dt>
            <dd>
              <p>Specifies a pointer to data that will be copied into the data
          store for initialization, or <code class="constant">NULL</code> if no data is
          to be copied.</p>
            </dd>
            <dt>
              <span class="term">
                <em class="parameter">
                  <code>usage</code>
                </em>
              </span>
            </dt>
            <dd>
              <p>Specifies the expected usage pattern of the data store. The
          symbolic constant must be <code class="constant">GL_STREAM_DRAW</code>,
          <code class="constant">GL_STREAM_READ</code>,
          <code class="constant">GL_STREAM_COPY</code>,
          <code class="constant">GL_STATIC_DRAW</code>,
          <code class="constant">GL_STATIC_READ</code>,
          <code class="constant">GL_STATIC_COPY</code>,
          <code class="constant">GL_DYNAMIC_DRAW</code>,
          <code class="constant">GL_DYNAMIC_READ</code>, or
          <code class="constant">GL_DYNAMIC_COPY</code>.</p>
            </dd>
          </dl>
        </div>
      </div>
      <div class="refsect1" id="description">
        <h2>Description</h2>
        <p><code class="function">glBufferData</code> and
    <code class="function">glNamedBufferData</code> create a new data store for a
    buffer object. In case of <code class="function">glBufferData</code>, the buffer
    object currently bound to <em class="parameter"><code>target</code></em> is used. For
    <code class="function">glNamedBufferData</code>, a buffer object associated with ID
    specified by the caller in <em class="parameter"><code>buffer</code></em> will be used
    instead.</p>
        <p>While creating the new storage, any pre-existing data store is
    deleted. The new data store is created with the specified
    <em class="parameter"><code>size</code></em> in bytes and <em class="parameter"><code>usage</code></em>. If
    <em class="parameter"><code>data</code></em> is not <code class="constant">NULL</code>, the data
    store is initialized with data from this pointer. In its initial state,
    the new data store is not mapped, it has a <code class="constant">NULL</code>
    mapped pointer, and its mapped access is
    <code class="constant">GL_READ_WRITE</code>.</p>
        <p><em class="parameter"><code>usage</code></em> is a hint to the GL implementation as
    to how a buffer object's data store will be accessed. This enables the GL
    implementation to make more intelligent decisions that may significantly
    impact buffer object performance. It does not, however, constrain the
    actual usage of the data store. <em class="parameter"><code>usage</code></em> can be broken
    down into two parts: first, the frequency of access (modification and
    usage), and second, the nature of that access. The frequency of access may
    be one of these:</p>
        <div class="variablelist">
          <dl class="variablelist">
            <dt>
              <span class="term">STREAM</span>
            </dt>
            <dd>
              <p>The data store contents will be modified once and used at most
          a few times.</p>
            </dd>
            <dt>
              <span class="term">STATIC</span>
            </dt>
            <dd>
              <p>The data store contents will be modified once and used many
          times.</p>
            </dd>
            <dt>
              <span class="term">DYNAMIC</span>
            </dt>
            <dd>
              <p>The data store contents will be modified repeatedly and used
          many times.</p>
            </dd>
          </dl>
        </div>
        <p>The nature of access may be one of these:</p>
        <div class="variablelist">
          <dl class="variablelist">
            <dt>
              <span class="term">DRAW</span>
            </dt>
            <dd>
              <p>The data store contents are modified by the application, and
          used as the source for GL drawing and image specification
          commands.</p>
            </dd>
            <dt>
              <span class="term">READ</span>
            </dt>
            <dd>
              <p>The data store contents are modified by reading data from the
          GL, and used to return that data when queried by the
          application.</p>
            </dd>
            <dt>
              <span class="term">COPY</span>
            </dt>
            <dd>
              <p>The data store contents are modified by reading data from the
          GL, and used as the source for GL drawing and image specification
          commands.</p>
            </dd>
          </dl>
        </div>
      </div>
      <div class="refsect1" id="notes">
        <h2>Notes</h2>
        <p>
            If <em class="parameter"><code>data</code></em> is <code class="constant">NULL</code>, a data store of the specified size is still created,
            but its contents remain uninitialized and thus undefined.
        </p>
        <p>
            Clients must align data elements consistently with the requirements of the client
            platform, with an additional base-level requirement that an offset within a buffer to
            a datum comprising <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mml:mi mathvariant="italic">N</mml:mi></mml:math> bytes be a
            multiple of <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mml:mi mathvariant="italic">N</mml:mi></mml:math>.
        </p>
        <p>
            The <code class="constant">GL_ATOMIC_COUNTER_BUFFER</code> target is available only if the GL version
            is 4.2 or greater.
        </p>
        <p>
            The <code class="constant">GL_DISPATCH_INDIRECT_BUFFER</code> and <code class="constant">GL_SHADER_STORAGE_BUFFER</code> targets are available only if the GL version
            is 4.3 or greater.
        </p>
        <p>
            The <code class="constant">GL_QUERY_BUFFER</code> target is available only if the GL version is 4.4 or greater.
        </p>
      </div>
      <div class="refsect1" id="errors">
        <h2>Errors</h2>
        <p><code class="constant">GL_INVALID_ENUM</code> is generated by
    <code class="function">glBufferData</code> if <em class="parameter"><code>target</code></em> is not
    one of the accepted buffer targets.</p>
        <p><code class="constant">GL_INVALID_ENUM</code> is generated if
    <em class="parameter"><code>usage</code></em> is not <code class="constant">GL_STREAM_DRAW</code>,
    <code class="constant">GL_STREAM_READ</code>, <code class="constant">GL_STREAM_COPY</code>,
    <code class="constant">GL_STATIC_DRAW</code>, <code class="constant">GL_STATIC_READ</code>,
    <code class="constant">GL_STATIC_COPY</code>, <code class="constant">GL_DYNAMIC_DRAW</code>,
    <code class="constant">GL_DYNAMIC_READ</code>, or
    <code class="constant">GL_DYNAMIC_COPY</code>.</p>
        <p><code class="constant">GL_INVALID_VALUE</code> is generated if
    <em class="parameter"><code>size</code></em> is negative.</p>
        <p><code class="constant">GL_INVALID_OPERATION</code> is generated by
    <code class="function">glBufferData</code> if the reserved buffer object name 0 is
    bound to <em class="parameter"><code>target</code></em>.</p>
        <p><code class="constant">GL_INVALID_OPERATION</code> is generated by
    <code class="function">glNamedBufferData</code> if buffer is not the name of an
    existing buffer object.</p>
        <p>
        <code class="constant">GL_INVALID_OPERATION</code> is generated if the
        <code class="constant">GL_BUFFER_IMMUTABLE_STORAGE</code> flag of the buffer
        object is <code class="constant">GL_TRUE</code>.
    </p>
        <p><code class="constant">GL_OUT_OF_MEMORY</code> is generated if the GL is
    unable to create a data store with the specified
    <em class="parameter"><code>size</code></em>.</p>
      </div>
      <div class="refsect1" id="associatedgets">
        <h2>Associated Gets</h2>
        <p>
        <a class="citerefentry" href="glGetBufferSubData.xhtml"><span class="citerefentry"><span class="refentrytitle">glGetBufferSubData</span></span></a>
    </p>
        <p>
        <a class="citerefentry" href="glGetBufferParameter.xhtml"><span class="citerefentry"><span class="refentrytitle">glGetBufferParameter</span></span></a>
        with argument <code class="constant">GL_BUFFER_SIZE</code> or <code class="constant">GL_BUFFER_USAGE</code>
    </p>
      </div>
      <div class="refsect1" id="versions">
        <h2>Version Support</h2>
        <div class="informaltable">
          <table style="border-collapse: collapse; border-top: 2px solid ; border-bottom: 2px solid ; border-left: 2px solid ; border-right: 2px solid ; ">
            <colgroup>
              <col style="text-align: left; "/>
              <col style="text-align: center; " class="firstvers"/>
              <col style="text-align: center; "/>
              <col style="text-align: center; "/>
              <col style="text-align: center; "/>
              <col style="text-align: center; "/>
              <col style="text-align: center; "/>
              <col style="text-align: center; "/>
              <col style="text-align: center; "/>
              <col style="text-align: center; "/>
              <col style="text-align: center; "/>
              <col style="text-align: center; "/>
              <col style="text-align: center; " class="lastvers"/>
            </colgroup>
            <thead>
              <tr>
                <th style="text-align: left; border-right: 2px solid ; ">
                 
            </th>
                <th style="text-align: center; border-bottom: 2px solid ; " colspan="12">
                <span class="bold"><strong>OpenGL Version</strong></span>
            </th>
              </tr>
              <tr>
                <th style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
                <span class="bold"><strong>Function / Feature Name</strong></span>
            </th>
                <th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
                <span class="bold"><strong>2.0</strong></span>
            </th>
                <th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
                <span class="bold"><strong>2.1</strong></span>
            </th>
                <th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
                <span class="bold"><strong>3.0</strong></span>
            </th>
                <th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
                <span class="bold"><strong>3.1</strong></span>
            </th>
                <th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
                <span class="bold"><strong>3.2</strong></span>
            </th>
                <th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
                <span class="bold"><strong>3.3</strong></span>
            </th>
                <th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
                <span class="bold"><strong>4.0</strong></span>
            </th>
                <th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
                <span class="bold"><strong>4.1</strong></span>
            </th>
                <th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
                <span class="bold"><strong>4.2</strong></span>
            </th>
                <th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
                <span class="bold"><strong>4.3</strong></span>
            </th>
                <th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
                <span class="bold"><strong>4.4</strong></span>
            </th>
                <th style="text-align: center; border-bottom: 2px solid ; ">
                <span class="bold"><strong>4.5</strong></span>
            </th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
                  <code class="function">glBufferData</code>
                </td>
                <td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
                <td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
                <td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
                <td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
                <td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
                <td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
                <td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
                <td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
                <td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
                <td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
                <td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
                <td style="text-align: center; border-bottom: 2px solid ; ">✔</td>
              </tr>
              <tr>
                <td style="text-align: left; border-right: 2px solid ; ">
                  <code class="function">glNamedBufferData</code>
                </td>
                <td style="text-align: center; border-right: 2px solid ; ">-</td>
                <td style="text-align: center; border-right: 2px solid ; ">-</td>
                <td style="text-align: center; border-right: 2px solid ; ">-</td>
                <td style="text-align: center; border-right: 2px solid ; ">-</td>
                <td style="text-align: center; border-right: 2px solid ; ">-</td>
                <td style="text-align: center; border-right: 2px solid ; ">-</td>
                <td style="text-align: center; border-right: 2px solid ; ">-</td>
                <td style="text-align: center; border-right: 2px solid ; ">-</td>
                <td style="text-align: center; border-right: 2px solid ; ">-</td>
                <td style="text-align: center; border-right: 2px solid ; ">-</td>
                <td style="text-align: center; border-right: 2px solid ; ">-</td>
                <td style="text-align: center; ">✔</td>
              </tr>
            </tbody>
          </table>
        </div>
      </div>
      <div class="refsect1" id="seealso">
        <h2>See Also</h2>
        <p>
            <a class="citerefentry" href="glBindBuffer.xhtml"><span class="citerefentry"><span class="refentrytitle">glBindBuffer</span></span></a>,
            <a class="citerefentry" href="glBufferSubData.xhtml"><span class="citerefentry"><span class="refentrytitle">glBufferSubData</span></span></a>,
            <a class="citerefentry" href="glMapBuffer.xhtml"><span class="citerefentry"><span class="refentrytitle">glMapBuffer</span></span></a>,
            <a class="citerefentry" href="glUnmapBuffer.xhtml"><span class="citerefentry"><span class="refentrytitle">glUnmapBuffer</span></span></a>
        </p>
      </div>
      <div class="refsect1" id="Copyright">
        <h2>Copyright</h2>
        <p>
            Copyright <span class="trademark"/>© 2005 Addison-Wesley.
            Copyright <span class="trademark"/>© 2010-2014 Khronos Group.
            This material may be distributed subject to the terms and conditions set forth in
            the Open Publication License, v 1.0, 8 June 1999.
            <a class="link" href="http://opencontent.org/openpub/" target="_top">http://opencontent.org/openpub/</a>.
        </p>
      </div>
    </div>
    <footer/>
  </body>
</html>
